package com.lcy.algorithm.huawei;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Scanner;

/**
 * 题目描述:现有两组服务器A和B ,每组有多个算力不同的CPU ,其中A[]是A组第i个CPU的运算能力，B[]是B组第i个CPU的运算能力。
 * 一组服务器的总算力是各CPU的算力之和。为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换 ,求两组服务器中,用于交换的CPU的算力,
 * 并且要求从A组服务器中选出的CPU ,算力尽可能小。
 * 输入描述:第一行输入为L1和L2，以空格分隔, L1表示A组服务器中的CPU数量, L2表示B组服务器中的CPU数量。
 * 第二行输入为A组服务器中各个CPU的算力值，以空格分隔。
 * 第三行输入为B组服务器中各个CPU的算力值，以空格分隔。
 * 1 <=L1 <= 10000
 * 1 <=L2 <= 10000
 * 1 <= A[i] <= 100000
 * 1 <= B[i] <= 100000
 * 输出描述:对于每组测试数据,输出两个整数,以空格分隔,依次表示A组选出的CPU算力、B组选出的CPU算力。
 * 要求从A组选出的CPU的算力尽可能小。
 * 补充说明:保证两组服务器的初始总算力不同。
 *
 *
 * 示例一：
 * 输入  2 2
 *      1 1
 *      2 3
 * 输出 2 3
 *
 *
 * 示例二：
 * 输入  2 2
 *      1 1
 *      2 2
 * 输出 1 2
 *
 * 示例三：
 * 输入  1 2
 *      2
 *      1 3
 * 输出 2 3
 * 示例四：
 * 输入  3 2
 *      1 2 5
 *      2 4
 * 输出 5 4
 */
public class CPU算力分配 {
    public static final String BLANK = " ";
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // A组服务器中的CPU数量
        String[] cpuGroupNum = scanner.nextLine().split(BLANK);
        int[] aGroup = new int[Integer.valueOf(cpuGroupNum[0])];
        int[] bGroup = new int[Integer.valueOf(cpuGroupNum[1])];

        String[] aCpuPower = scanner.nextLine().split(BLANK);

        for(int i=0;i<aCpuPower.length;i++){
            aGroup[i] = Integer.valueOf(aCpuPower[i]);
        }
        String[] bCpuPower = scanner.nextLine().split(BLANK);
        for(int i=0;i<bCpuPower.length;i++){
            bGroup[i] = Integer.valueOf(bCpuPower[i]);
        }

        int[] swapCpu = findSwapCpu(aGroup, bGroup);
        System.out.println(swapCpu[0] + " "+swapCpu[1]);
    }

    public static int[] findSwapCpu(int[] A, int[] B) {
        Arrays.sort(A); // 对A组CPU的算力值进行排序，以便选择最小的算力值
        Arrays.sort(B);

        int sumA = Arrays.stream(A).sum(); // 计算A组服务器的总算力
        int sumB = Arrays.stream(B).sum(); // 计算B组服务器的总算力

        int diff = Math.abs(sumA - sumB); // 交换前两组算力差值

        int[] result = new int[2]; // 用于存储需要交换的两个CPU的算力值

        for (int i = 0; i < A.length; i++) {
            for (int j = 0; j < B.length; j++) {
                //sumA - A[i] + B[j]表示交换后A的总算力; sumB - B[j] + A[i]表示交换后B的总算力
                int newDiff = Math.abs((sumA - A[i] + B[j]) - (sumB - B[j] + A[i]));
                if (newDiff < diff) { // 如果交换后的差值更小，则更新结果
                    diff = newDiff;
                    result[0] = A[i];
                    result[1] = B[j];
                }
            }
        }
        return result;
    }

}
